home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / AIncludes / ATA.a < prev    next >
Text File  |  1996-05-01  |  52KB  |  871 lines

  1. ;
  2. ;    File:        ATA.a
  3. ;
  4. ;    Contains:    ATA (PC/AT Attachment) Interfaces
  5. ;
  6. ;    Version:    Technology:    System 7.5
  7. ;                Release:    Universal Interfaces 3.0d3 on Copland DR1
  8. ;
  9. ;    Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10. ;
  11. ;    Bugs?:        If you find a problem with this file, send the file and version
  12. ;                information (from above) and the problem description to:
  13. ;
  14. ;                    Internet:    apple.bugs@applelink.apple.com
  15. ;                    AppleLink:    APPLE.BUGS
  16. ;
  17. ;
  18.     IF &TYPE('__ATA__') = 'UNDEFINED' THEN
  19. __ATA__ SET 1
  20.  
  21.     IF &TYPE('__TYPES__') = 'UNDEFINED' THEN
  22.     include 'Types.a'
  23.     ENDIF
  24.     IF &TYPE('__MIXEDMODE__') = 'UNDEFINED' THEN
  25.     include 'MixedMode.a'
  26.     ENDIF
  27.     IF FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE THEN
  28. ;  This is the structure used for the AT Interface core routines below 
  29.  
  30. kATATrap                        EQU        $AAF1                ; Manager trap number <This should be defined in Traps.h>
  31. kATAPBVers1                        EQU        $01                    ; parameter block version number 1
  32. kATAPBVers2                        EQU        $02                    ; parameter block version number for structures
  33. kATAPBVers3                        EQU        $03                    ; parameter block version for ATA times
  34. kATADefaultBlockSize            EQU        512                    ; default block size
  35. ;  Used to determine the presence of traps
  36.  
  37. kFSMTrap                        EQU        $AC
  38. mDQEChanged                        EQU        1                    ; DQE has changed 
  39. ;  Task file definition *** Error Register ***
  40.  
  41. bATABadBlock                    EQU        7                    ; bit number of bad block error bit
  42. bATAUncorrectable                EQU        6                    ; bit number of uncorrectable error bit
  43. bATAMediaChanged                EQU        5                    ; bit number of media changed indicator
  44. bATAIDNotFound                    EQU        4                    ; bit number of ID not found error bit
  45. bATAMediaChangeReq                EQU        3                    ; bit number of media changed request
  46. bATACommandAborted                EQU        2                    ; bit number of command abort bit
  47. bATATrack0NotFound                EQU        1                    ; bit number of track not found
  48. bATAAddressNotFound                EQU        0                    ; bit number of address mark not found
  49. mATABadBlock                    EQU        $80                    ; Bad Block Detected
  50. mATAUncorrectable                EQU        $40                    ; Uncorrectable Data Error
  51. mATAMediaChanged                EQU        $20                    ; Media Changed Indicator (for removable)
  52. mATAIDNotFound                    EQU        $10                    ; ID Not Found
  53. mATAMediaChangeReq                EQU        $08                    ; Media Change Requested (NOT IMPLEMENTED)
  54. mATACommandAborted                EQU        $04                    ; Aborted Command
  55. mATATrack0NotFound                EQU        $02                    ; Track 0 Not Found
  56. mATAAddressNotFound                EQU        $01                    ; Address Mark Not Found
  57. ;  Task file definition *** ataTFSDH Register ***
  58.  
  59. mATAHeadNumber                    EQU        $0F                    ; Head Number (bits 0-3) 
  60. mATASectorSize                    EQU        $A0                    ; bit 7=1; bit 5 = 01 (512 sector size) <DP4>
  61. mATADriveSelect                    EQU        $10                    ; Drive (0 = master, 1 = slave) 
  62. mATALBASelect                    EQU        $40                    ; LBA mode bit (0 = chs, 1 = LBA)
  63. ;  Task file definition *** Status Register ***
  64.  
  65. bATABusy                        EQU        7                    ; bit number of BSY bit
  66. bATADriveReady                    EQU        6                    ; bit number of drive ready bit
  67. bATAWriteFault                    EQU        5                    ; bit number of write fault bit
  68. bATASeekComplete                EQU        4                    ; bit number of seek complete bit
  69. bATADataRequest                    EQU        3                    ; bit number of data request bit
  70. bATADataCorrected                EQU        2                    ; bit number of data corrected bit
  71. bATAIndex                        EQU        1                    ; bit number of index mark
  72. bATAError                        EQU        0                    ; bit number of error bit
  73. mATABusy                        EQU        $80                    ; Unit is busy
  74. mATADriveReady                    EQU        $40                    ; Unit is ready
  75. mATAWriteFault                    EQU        $20                    ; Unit has a write fault condition
  76. mATASeekComplete                EQU        $10                    ; Unit seek complete
  77. mATADataRequest                    EQU        $08                    ; Unit data request
  78. mATADataCorrected                EQU        $04                    ; Data corrected
  79. mATAIndex                        EQU        $02                    ; Index mark - NOT USED
  80. mATAError                        EQU        $01                    ; Error condition - see error register
  81. ;  ATA Command Opcode definition
  82.  
  83. kATAcmdWORetry                    EQU        $01                    ; Without I/O retry option
  84. kATAcmdNOP                        EQU        $0000                ; NOP operation - media detect
  85. kATAcmdRecal                    EQU        $0010                ; Recalibrate command 
  86. kATAcmdRead                        EQU        $0020                ; Read command 
  87. kATAcmdReadLong                    EQU        $0022                ; Read Long command
  88. kATAcmdWrite                    EQU        $0030                ; Write command 
  89. kATAcmdWriteLong                EQU        $0032                ; Write Long
  90. kATAcmdReadVerify                EQU        $0040                ; Read Verify command 
  91. kATAcmdFormatTrack                EQU        $0050                ; Format Track command 
  92. kATAcmdSeek                        EQU        $0070                ; Seek command 
  93. kATAcmdDiagnostic                EQU        $0090                ; Drive Diagnostic command 
  94. kATAcmdInitDrive                EQU        $0091                ; Init drive parameters command 
  95. kATAcmdReadMultiple                EQU        $00C4                ; Read multiple
  96. kATAcmdWriteMultiple            EQU        $00C5                ; Write multiple
  97. kATAcmdSetRWMultiple            EQU        $00C6                ; Set Multiple for Read/Write Multiple
  98. kATAcmdReadDMA                    EQU        $00C8                ; Read DMA (with retries)
  99. kATAcmdWriteDMA                    EQU        $00CA                ; Write DMA (with retries)
  100. kATAcmdMCAcknowledge            EQU        $00DB                ; Acknowledge media change - removable
  101. kATAcmdStandbyImmed                EQU        $00E0                ; Standby Immediate
  102. kATAcmdIdleImmed                EQU        $00E1                ; Idle Immediate
  103. kATAcmdStandby                    EQU        $00E2                ; Standby
  104. kATAcmdIdle                        EQU        $00E3                ; Idle
  105. kATAcmdReadBuffer                EQU        $00E4                ; Read sector buffer command 
  106. kATAcmdCheckPowerMode            EQU        $00E5                ; Check power mode command    <04/04/94>
  107. kATAcmdSleep                    EQU        $00E6                ; Sleep
  108. kATAcmdWriteBuffer                EQU        $00E8                ; Write sector buffer command 
  109. kATAcmdDriveIdentify            EQU        $00EC                ; Identify Drive command 
  110. kATAcmdSetFeatures                EQU        $00EF                ; Set Features
  111. ;  Set feature command opcodes
  112.  
  113. kATAEnableWriteCache            EQU        $02                    ;        Enable write cache
  114. kATASetTransferMode                EQU        $03                    ;        Set transfer mode
  115. kATASetPIOMode                    EQU        $08                    ;        PIO Flow Control Tx Mode bit
  116. kATAEnableECC                    EQU        $88                    ;        ECC enable
  117. kATAEnableRetry                    EQU        $99                    ;        Retry enable
  118. kATAEnableReadAhead                EQU        $AA                    ;        Read look-ahead enable
  119. ;  Device Register Images  (8 bytes) 
  120. ataTaskFile                RECORD 0
  121. ataTFFeatures             ds.b    1                ; offset: $0 (0)        ;  <-> Error(R) or ataTFFeatures(W) register image 
  122. ataTFCount                 ds.b    1                ; offset: $1 (1)        ;  <-> Sector count/remaining 
  123. ataTFSector                 ds.b    1                ; offset: $2 (2)        ;  <-> Sector start/finish 
  124. ataTFReserved             ds.b    1                ; offset: $3 (3)        ;  reserved                    
  125. ataTFCylinder             ds.w    1                ; offset: $4 (4)        ;  <-> ataTFCylinder (Big endian) 
  126. ataTFSDH                 ds.b    1                ; offset: $6 (6)        ;  <-> ataTFSDH register image
  127. ataTFCommand             ds.b    1                ; offset: $7 (7)        ;  <-> Status(R) or Command(W) register image 
  128. sizeof                     EQU *                    ; size:   $8 (8)
  129.                         ENDR
  130. ;  ATA Manager Function Code Definition
  131.  
  132. kATAMgrNOP                        EQU        $00                    ; No Operation
  133. kATAMgrExecIO                    EQU        $01                    ; Execute ATA I/O
  134. kATAMgrBusInquiry                EQU        $03                    ; Bus Inquiry
  135. kATAMgrQRelease                    EQU        $04                    ; I/O Queue Release
  136. kATAMgrAbort                    EQU        $10                    ; Abort command
  137. kATAMgrBusReset                    EQU        $11                    ; Reset ATA bus
  138. kATAMgrRegAccess                EQU        $12                    ; Register Access
  139. kATAMgrDriveIdentify            EQU        $13                    ; Drive Identify            <DP03/10/94>
  140. kATAMgrDriverLoad                EQU        $82                    ; Load driver from either Media, ROM, etc.
  141. kATAMgrDriveRegister            EQU        $85                    ; Register a driver        <4/18/94>
  142. kATAMgrFindDriverRefnum            EQU        $86                    ; lookup a driver refnum    <4/18/94>
  143. kATAMgrRemoveDriverRefnum        EQU        $87                    ; De-register a driver    <4/18/94>
  144. kATAMgrModifyEventMask            EQU        $88                    ; Modify driver event mask
  145. kATAMgrDriveEject                EQU        $89                    ; Eject the drive        <8/1/94>
  146. kATAMgrGetDrvConfiguration        EQU        $8A                    ; Get device configuration    <8/6/94>
  147. kATAMgrSetDrvConfiguration        EQU        $8B                    ; Set device configuration <8/6/94>
  148. kATAMgrGetLocationIcon            EQU        $8C                    ; Get card location icon    <SM4>
  149. kATAMgrManagerInquiry            EQU        $90                    ; Manager Inquiry
  150. kATAMgrManagerInit                EQU        $91                    ; Manager initialization
  151. kATAMgrManagerShutdown            EQU        $92                    ; Manager ShutDown
  152. ;  'ATAFlags' field of the PB header definition
  153.  
  154. bATAFlagUseConfigSpeed            EQU        15                    ; bit number of use default speed flag
  155. bATAFlagByteSwap                EQU        14                    ; bit number of byte swap flag
  156. bATAFlagIORead                    EQU        13                    ; bit number of I/O read flag
  157. bATAFlagIOWrite                    EQU        12                    ; bit number of I/O write flag
  158. bATAFlagImmediate                EQU        11                    ; bit number of immediate flag
  159. bATAFlagQLock                    EQU        10                    ; bit number of que lock on error
  160. bATAFlagScatterGather1            EQU        9                    ; bit number of scatter gather
  161. bATAFlagScatterGather0            EQU        8                    ; bit numbers of scatter gather
  162. bATAFlagUseDMA                    EQU        7                    ; bit number of use DMA flag
  163. bATAFlagProtocol1                EQU        5                    ; bit number of scatter gather
  164. bATAFlagProtocol0                EQU        4                    ; bit numbers of protocol specifier
  165. bATAFlagTFRead                    EQU        3                    ; bit number of register update
  166. bATAFlagLEDEnable                EQU        0                    ; bit number of LED enable
  167. mATAFlagUseConfigSpeed            EQU        $8000
  168. mATAFlagByteSwap                EQU        $4000                ; Swap data bytes (read - after; write - before)
  169. mATAFlagIORead                    EQU        $2000                ; Read (in) operation
  170. mATAFlagIOWrite                    EQU        $1000                ; Write (out) operation
  171. mATAFlagImmediate                EQU        $0800                ; Head of Que; Immediate operation
  172. mATAFlagQLock                    EQU        $0400                ; Manager queue lock on error (freeze the queue)
  173. mATAFlagScatterGather1            EQU        $0200
  174. mATAFlagScatterGather0            EQU        $0100                ; Scatter gather enable
  175. mATAFlagScatterGathers            EQU        $0300                ; host scatter gather type = currently type 1 supported
  176. mATAFlagUseDMA                    EQU        $80
  177. mATAFlagProtocol1                EQU        $20                    ; ATAPI protocol indicator <06/15/94>
  178. mATAFlagProtocol0                EQU        $10                    ; PCMCIA protocol indicator <06/15/94>
  179. mATAFlagProtocols                EQU        $30                    ; mask for protocol type field    <06/15/94>
  180. mATAFlagTFRead                    EQU        $08                    ; update reg block request upon detection of an error
  181. mATAFlagLEDEnable                EQU        $01                    ; socket LED enable
  182. ;  Parameter block header definition - common for all PBs (48 bytes)
  183. ataPBHeader                RECORD 0
  184. ;  Start of cloned common header ataPBHdr 
  185. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  186. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  187. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number
  188. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  189. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  190. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  191. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  192. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  193. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  194. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  195. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  196. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  197. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  198. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  199. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  200. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  201. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  202. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  203. ;  End of cloned common header ataPBHdr
  204. sizeof                     EQU *                    ; size:   $30 (48)
  205.                         ENDR
  206. ;  data request entry structure (16 bytes)
  207. IOBlock                    RECORD 0
  208. ataPBBuffer                 ds.l    1                ; offset: $0 (0)        ;  -->: Data buffer pointer
  209. ataPBByteCount             ds.l    1                ; offset: $4 (4)        ;  -->: Data transfer length in bytes
  210. sizeof                     EQU *                    ; size:   $8 (8)
  211.                         ENDR
  212. ;
  213. ; For ATAPI devices the ExtendedPB field is a pointer to the Command Packet
  214. ; record which exists of an array of words structured as follows...    <06/15/94>
  215. ;
  216. ATAPICmdPacket            RECORD 0
  217. atapiPacketSize             ds.w    1                ; offset: $0 (0)        ;  Size of command packet in bytes    <06/15/94>
  218. atapiCommandByte         ds.w    8                ; offset: $2 (2)        ;  The command packet itself    <06/15/94>
  219. sizeof                     EQU *                    ; size:   $12 (18)
  220.                         ENDR
  221. ;  Manager parameter block structure (96 bytes)
  222. ataIOPB                    RECORD 0
  223. ;  Start of cloned common header ataPBHdr
  224. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  225. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  226. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  227. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  228. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  229. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  230. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  231. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  232. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  233. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  234. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  235. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  236. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  237. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  238. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  239. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  240. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  241. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  242. ;  End of cloned common header ataPBHdr
  243. ataPBStatusRegister         ds.b    1                ; offset: $30 (48)        ;  <--: Last ATA status image
  244. ataPBErrorRegister         ds.b    1                ; offset: $31 (49)        ;  <--: Last ATA error image-valid if lsb of Status set
  245. ataPBReserved5             ds.w    1                ; offset: $32 (50)        ;  Reserved
  246. ataPBLogicalBlockSize     ds.l    1                ; offset: $34 (52)        ;  -->: Blind transfer size per interrupt (Logical block size)
  247. ataPBBuffer                 ds.l    1                ; offset: $38 (56)        ;  -->: Data buffer pointer
  248. ataPBByteCount             ds.l    1                ; offset: $3C (60)        ;  -->: Data transfer length in bytes
  249. ataPBActualTxCount         ds.l    1                ; offset: $40 (64)        ;  <--: Actual transfer count
  250. ataPBReserved6             ds.l    1                ; offset: $44 (68)        ;  Reserved
  251. ataPBTaskFile             ds        ataTaskFile        ; offset: $48 (72)        ;  <->:    Device register images
  252. ataPBPacketPtr             ds.l    1                ; offset: $50 (80)        ;  -->: ATAPI packet command block pointer (valid with ATAPI bit set)
  253. ataPBReserved7             ds.w    6                ; offset: $54 (84)        ;  Reserved for future expansion
  254. sizeof                     EQU *                    ; size:   $60 (96)
  255.                         ENDR
  256. ;
  257. ; Parameter block structure for bus and Manager inquiry command
  258. ; Manager parameter block structure
  259. ;
  260. ataBusInquiry            RECORD 0
  261. ;  Start of cloned common header ataPBHdr
  262. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  263. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  264. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  265. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  266. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  267. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  268. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  269. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  270. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  271. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  272. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  273. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  274. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  275. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  276. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  277. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  278. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  279. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  280. ;  End of cloned common header ataPBHdr
  281. ataEngineCount             ds.w    1                ; offset: $30 (48)        ;  <--: TBD; zero for now
  282. ataPBReserved5             ds.w    1                ; offset: $32 (50)        ;  Reserved
  283. ataDataTypes             ds.l    1                ; offset: $34 (52)        ;  <--: TBD; zero for now
  284. ataIOpbSize                 ds.w    1                ; offset: $38 (56)        ;  <--: Size of ATA IO PB
  285. ataMaxIOpbSize             ds.w    1                ; offset: $3A (58)        ;  <--: TBD; zero for now
  286. ataFeatureFlags             ds.l    1                ; offset: $3C (60)        ;  <--: TBD
  287. ataVersionNum             ds.b    1                ; offset: $40 (64)        ;  <--: Version number for the HBA
  288. ataHBAInquiry             ds.b    1                ; offset: $41 (65)        ;  <--: TBD; zero for now
  289. ataPBReserved6             ds.w    1                ; offset: $42 (66)        ;  Reserved
  290. ataHBAPrivPtr             ds.l    1                ; offset: $44 (68)        ;  <--: Ptr to HBA private data area
  291. ataHBAPrivSize             ds.l    1                ; offset: $48 (72)        ;  <--: Size of HBA private data area
  292. ataAsyncFlags             ds.l    1                ; offset: $4C (76)        ;  <--: Event capability for callback
  293. ataPBReserved7             ds.l    4                ; offset: $50 (80)        ;  Reserved
  294. ataReserved4             ds.l    1                ; offset: $60 (96)        ;  Reserved
  295. ataReserved5             ds.b    16                ; offset: $64 (100)        ;  TBD
  296. ataHBAVendor             ds.b    16                ; offset: $74 (116)        ;  <--: Vendor ID of the HBA
  297. ataContrlFamily             ds.b    16                ; offset: $84 (132)        ;  <--: Family of ATA Controller
  298. ataContrlType             ds.b    16                ; offset: $94 (148)        ;  <--: Model number of controller
  299. ataXPTversion             ds.b    4                ; offset: $A4 (164)        ;  <--: version number of XPT
  300. ataResrved6                 ds.b    4                ; offset: $A8 (168)        ;  Reserved
  301. ataHBAversion             ds.b    4                ; offset: $AC (172)        ;  <--: version number of HBA
  302. ataHBAslotType             ds.b    1                ; offset: $B0 (176)        ;  <--: type of slot
  303. ataHBAslotNum             ds.b    1                ; offset: $B1 (177)        ;  <--: slot number of the HBA
  304. ataReserved7             ds.w    1                ; offset: $B2 (178)        ;  Reserved
  305. ataReserved8             ds.l    1                ; offset: $B4 (180)        ;  Reserved
  306. sizeof                     EQU *                    ; size:   $B8 (184)
  307.                         ENDR
  308. ;  Manager parameter block structure
  309. ataMgrInquiry            RECORD 0
  310. ;  Start of cloned common header ataPBHdr
  311. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  312. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  313. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  314. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  315. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  316. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  317. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  318. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  319. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  320. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  321. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  322. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  323. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  324. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  325. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  326. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  327. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  328. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  329. ;  End of cloned common header ataPBHdr
  330. ataMgrVersion             ds        NumVersion        ; offset: $30 (48)        ;  Manager Version information
  331. ataMgrPBVers             ds.b    1                ; offset: $34 (52)        ;  <--: Manager PB version number supported
  332. Reserved1                 ds.b    1                ; offset: $35 (53)        ;  Reserved
  333. ataBusCnt                 ds.w    1                ; offset: $36 (54)        ;  <--: Number of ATA buses in the system
  334. ataDevCnt                 ds.w    1                ; offset: $38 (56)        ;  <--: Total number of ATA devices detected
  335. ataPioModes                 ds.b    1                ; offset: $3A (58)        ;  <--: Maximum Programmed I/O speed mode supported
  336. Reserved2                 ds.b    1                ; offset: $3B (59)        ;  Reserved
  337. ataIOClkResolution         ds.w    1                ; offset: $3C (60)        ;  <--: IO Clock resolution in nsec (Not supported)
  338. ataSingleDMAModes         ds.b    1                ; offset: $3E (62)        ;  <--: Single Word DMA modes supported    
  339. ataMultiDMAModes         ds.b    1                ; offset: $3F (63)        ;  <--: Multiword DMA modes supported
  340. Reserved                 ds.w    16                ; offset: $40 (64)        ;  Reserved for future expansion
  341. sizeof                     EQU *                    ; size:   $60 (96)
  342.                         ENDR
  343. ;
  344. ; Parameter block structure for Abort command
  345. ; Manager parameter block structure
  346. ;
  347. ataAbort                RECORD 0
  348. ;  Start of cloned common header ataPBHdr
  349. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  350. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  351. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  352. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  353. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  354. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  355. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  356. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  357. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  358. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  359. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  360. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  361. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  362. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  363. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  364. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  365. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  366. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  367. ;  End of cloned common header ataPBHdr
  368. ataAbortPB                 ds.l    1                ; offset: $30 (48)        ;  -->: Parameter block to be aborted
  369. Reserved                 ds.w    22                ; offset: $34 (52)        ;  Reserved for future expansion
  370. sizeof                     EQU *                    ; size:   $60 (96)
  371.                         ENDR
  372. ;  Manager parameter block structure
  373. ATAEventRec                RECORD 0
  374. ataEventCode             ds.w    1                ; offset: $0 (0)        ;  --> ATA event code
  375. ataPhysicalID             ds.w    1                ; offset: $2 (2)        ;  --> Physical drive reference
  376. ataDrvrContext             ds.l    1                ; offset: $4 (4)        ;  Context pointer saved by driver
  377. sizeof                     EQU *                    ; size:   $8 (8)
  378.                         ENDR
  379. ; typedef struct ATAEventRec *            ATAEventRecPtr
  380.  
  381. ;
  382. ; Parameter block structure for Driver Register command
  383. ; Manager parameter block structure
  384. ;
  385. ataDrvrRegister            RECORD 0
  386. ;  Start of cloned common header ataPBHdr
  387. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  388. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  389. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  390. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  391. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  392. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  393. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  394. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  395. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  396. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  397. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  398. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  399. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  400. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  401. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  402. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  403. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  404. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  405. ;  End of cloned common header ataPBHdr
  406. ataDrvrRefNum             ds.w    1                ; offset: $30 (48)        ;  <->: Driver reference number
  407. ataDrvrFlags             ds.w    1                ; offset: $32 (50)        ;  -->: 1 = loader driver if ataPBDeviceID = -1 {PB2}
  408. ataDeviceNextID             ds.w    1                ; offset: $34 (52)        ;  <--: used to specified the next drive ID
  409. ataDrvrLoadPriv             ds.w    1                ; offset: $36 (54)        ;  Driver loader private storage
  410. ataEventHandler             ds.l    1                ; offset: $38 (56)        ;  <->: Pointer to ATA event callback routine {PB2}
  411. ataDrvrContext             ds.l    1                ; offset: $3C (60)        ;  <->: Context data saved by driver {PB2}
  412. ataEventMask             ds.l    1                ; offset: $40 (64)        ;  <->: Set to 1 for notification of event {PB2}
  413. Reserved                 ds.w    14                ; offset: $44 (68)        ;  Reserved for future expansion - from [21] {PB2}
  414. sizeof                     EQU *                    ; size:   $60 (96)
  415.                         ENDR
  416. ;  Parameter block structure for Modify driver event mask command
  417. ataModifyEventMask        RECORD 0
  418. ;  Start of cloned common header ataPBHdr
  419. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  420. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  421. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  422. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  423. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  424. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  425. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  426. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  427. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  428. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  429. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  430. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  431. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  432. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  433. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  434. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  435. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  436. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  437. ;  End of cloned common header ataPBHdr
  438. ataModifiedEventMask     ds.l    1                ; offset: $30 (48)        ;  -->: new event mask value
  439. Reserved                 ds.w    22                ; offset: $34 (52)        ;  Reserved for future expansion
  440. sizeof                     EQU *                    ; size:   $60 (96)
  441.                         ENDR
  442. ;  'ataRegMask' field of the ataRegAccess definition
  443.  
  444. bATAAltSDevCValid                EQU        14                    ; bit number of alternate status/device cntrl valid bit
  445. bATAStatusCmdValid                EQU        7                    ; bit number of status/command valid bit
  446. bATASDHValid                    EQU        6                    ; bit number of ataTFSDH valid bit
  447. bATACylinderHiValid                EQU        5                    ; bit number of cylinder high valid bit
  448. bATACylinderLoValid                EQU        4                    ; bit number of cylinder low valid bit
  449. bATASectorNumValid                EQU        3                    ; bit number of sector number valid bit
  450. bATASectorCntValid                EQU        2                    ; bit number of sector count valid bit
  451. bATAErrFeaturesValid            EQU        1                    ; bit number of error/features valid bit
  452. bATADataValid                    EQU        0                    ; bit number of data valid bit
  453. mATAAltSDevCValid                EQU        $4000                ; alternate status/device control valid
  454. mATAStatusCmdValid                EQU        $80                    ; status/command valid
  455. mATASDHValid                    EQU        $40                    ; ataTFSDH valid
  456. mATACylinderHiValid                EQU        $20                    ; cylinder high valid
  457. mATACylinderLoValid                EQU        $10                    ; cylinder low valid
  458. mATASectorNumValid                EQU        $08                    ; sector number valid
  459. mATASectorCntValid                EQU        $04                    ; sector count valid
  460. mATAErrFeaturesValid            EQU        $02                    ; error/features valid
  461. mATADataValid                    EQU        $01                    ; data valid
  462. ;  Parameter block structure for device register access command
  463. ataRegValueUnion        RECORD 0
  464. ataByteRegValue             ds.b    1                ; offset: $0 (0)        ;  <->: Byte register value read or to be written
  465.                          ORG 0
  466. ataWordRegValue             ds.w    1                ; offset: $0 (0)        ;  <->: Word register value read or to be written
  467. sizeof                     EQU *                    ; size:   $2 (2)
  468.                         ENDR
  469. ;  Manager parameter block structure
  470. ataRegAccess            RECORD 0
  471. ;  Start of cloned common header ataPBHdr
  472. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  473. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  474. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  475. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  476. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  477. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  478. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  479. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  480. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  481. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  482. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  483. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  484. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  485. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  486. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  487. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  488. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  489. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  490. ;  End of cloned common header ataPBHdr
  491. ataRegSelect             ds.w    1                ; offset: $30 (48)        ;  -->: Device Register Selector
  492. ;             DataReg            0    
  493. ;             ErrorReg(R) or FeaturesReg(W)    1
  494. ;             SecCntReg        2
  495. ;             SecNumReg        3
  496. ;             CylLoReg        4
  497. ;             CylHiReg        5
  498. ;             SDHReg            6
  499. ;             StatusReg(R) or CmdReg(W)        7
  500. ;             AltStatus(R) or DevCntr(W)    0E
  501. ataRegValue                 ds        ataRegValueUnion ; offset: $32 (50)
  502. ;  Following fields are valid only if ataRegSelect = 0xFFFF
  503. ataRegMask                 ds.w    1                ; offset: $34 (52)        ;  -->: mask for register(s) to update
  504. ;         bit 0 : data register valid
  505. ;         bit 1 : error/feaures register valid
  506. ;         bit 2 : sector count register valid
  507. ;         bit 3 : sector number register valid
  508. ;         bit 4 : cylinder low register valid
  509. ;         bit 5 : cylinder high register valid
  510. ;         bit 6 : ataTFSDH register valid
  511. ;         bit 7 : status/command register valid
  512. ;         bits 8 - 13 : reserved (set to 0)
  513. ;         bit 14: alternate status / device control reg valid
  514. ;          bit 15: reserved (set to 0)
  515. ataRegisterImage         ds        ataTaskFile        ; offset: $36 (54)        ;  <->: register images
  516. ataAltSDevCReg             ds.b    1                ; offset: $3E (62)        ;  <->: Alternate status(R) or Device Control(W) register image
  517. Reserved3                 ds.b    1                ; offset: $3F (63)        ;  Reserved
  518. Reserved                 ds.w    16                ; offset: $40 (64)        ;  Reserved for future expansion
  519. sizeof                     EQU *                    ; size:   $60 (96)
  520.                         ENDR
  521. ;  Manager parameter block structure    <DP03/10/94>
  522. ataIdentify                RECORD 0
  523. ;  Start of cloned common header ataPBHdr
  524. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  525. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  526. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  527. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  528. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  529. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  530. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  531. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  532. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  533. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  534. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  535. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  536. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  537. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  538. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  539. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  540. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  541. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  542. ;  End of cloned common header ataPBHdr
  543. Reserved1                 ds.w    4                ; offset: $30 (48)        ;  Reserved.  These are used internally by the Manager
  544. ataPBBuffer                 ds.l    1                ; offset: $38 (56)        ;  Buffer for the identify data (512 bytes)
  545. Reserved2                 ds.w    12                ; offset: $3C (60)        ;  Used internally by the ATA Manager
  546. Reserved3                 ds.w    6                ; offset: $54 (84)        ;  Reserved for future expansion
  547. sizeof                     EQU *                    ; size:   $60 (96)
  548.                         ENDR
  549. ;  'ataConfigSetting' field of the Get/Set Device Configuration definition <8/6/94>
  550.  
  551. ATAPIpacketDRQ_bit                EQU        6                    ; bit number of ATAPI command packet DRQ option
  552. ATAPIpacketDRQ                    EQU        $40                    ; ATAPI command packet DRQ option
  553. ;  atapcValid field definition
  554.  
  555. bATApcAccessMode                EQU        0
  556. bATApcVcc                        EQU        1
  557. bATApcVpp1                        EQU        2
  558. bATApcVpp2                        EQU        3
  559. bATApcStatus                    EQU        4
  560. bATApcPin                        EQU        5
  561. bATApcCopy                        EQU        6
  562. bATApcConfigIndex                EQU        7
  563. bATApcLockUnlock                EQU        15
  564. mATApcAccessMode                EQU        $01
  565. mATApcVcc                        EQU        $02
  566. mATApcVpp1                        EQU        $04
  567. mATApcVpp2                        EQU        $08
  568. mATApcStatus                    EQU        $10
  569. mATApcPin                        EQU        $20
  570. mATApcCopy                        EQU        $40
  571. mATApcConfigIndex                EQU        $80
  572. mATApcLockUnlock                EQU        $8000
  573. ;  Device physical type & socket type indicator definition
  574.  
  575. kATADeviceUnknown                EQU        $00                    ; no device or type undetermined
  576. kATADeviceATA                    EQU        $01                    ; traditional ATA protocol device <7/29/94>
  577. kATADeviceATAPI                    EQU        $02                    ; ATAPI protocol device    <7/29/94>
  578. kATADevicePCMCIA                EQU        $03                    ; PCMCIA ATA device        <7/29/94>
  579. kATASocketInternal                EQU        $01                    ; Internal ATA socket
  580. kATASocketMB                    EQU        $02                    ; Media Bay socket
  581. kATASocketPCMCIA                EQU        $03                    ; PCMCIA socket
  582. kATAConfigReserved                EQU        7                    ; number of reserved words at the end
  583. ;
  584. ; Get/Set Device Configuration parameter block structure <8/6/94>
  585. ; Manager parameter block structure
  586. ;
  587. ataDevConfiguration        RECORD 0
  588. ;  Start of cloned common header ataPBHdr
  589. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  590. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  591. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  592. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  593. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  594. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  595. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  596. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  597. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  598. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  599. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  600. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  601. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  602. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  603. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  604. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  605. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  606. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  607. ;  End of cloned common header ataPBHdr
  608. ataConfigSetting         ds.l    1                ; offset: $30 (48)        ;  <->: Configuration setting
  609. ;       Bits 3 - 0: Reserved
  610. ;       Bit 4: Reserved (allowLBAAccess)
  611. ;       Bit 5: Reserved (allowRWMultiple)
  612. ;       Bit 6: ATAPIpacketDRQ
  613. ;         1 = Check for Interrupt DRQ on ATAPI command packet DRQ
  614. ;         0 = Default: Check only for the assertion of command packet DRQ
  615. ;       Bits 31 - 7: Reserved
  616. ataPIOSpeedMode             ds.b    1                ; offset: $34 (52)        ;  <->: Device access speed in PIO Mode
  617. Reserved3                 ds.b    1                ; offset: $35 (53)        ;  Reserved to force word alignment
  618. atapcValid                 ds.w    1                ; offset: $36 (54)        ;  <->: Set when pcXXX fields are valid (atapcAccessMode - atapcConfigIndex)
  619. ;         bit 0 - atapcAccessMode field valid, when set
  620. ;         bit 1 - atapcVcc field valid, when set
  621. ;         bit 2 - atapcVpp1 field valid, when set
  622. ;         bit 3 - atapcVpp2 field valid, when set
  623. ;         bit 4 - atapcStatus field valid, when set
  624. ;         bit 5 - atapcPin field valid, when set
  625. ;         bit 6 - atapcCopy field valid, when set
  626. ;         bit 7 - atapcConfigIndex field valid, when set
  627. ;         bits 14-8 - Reserved
  628. ;         bit 15 - device lock/unlock request (write only)
  629. ataRWMultipleCount         ds.w    1                ; offset: $38 (56)        ;  Reserved for future (not supported yet)
  630. ataSectorsPerCylinder     ds.w    1                ; offset: $3A (58)        ;  Reserved for future (not supported yet)
  631. ataHeads                 ds.w    1                ; offset: $3C (60)        ;  Reserved for future (not supported yet)
  632. ataSectorsPerTrack         ds.w    1                ; offset: $3E (62)        ;  Reserved for future (not supported yet)
  633. ataSocketNumber             ds.w    1                ; offset: $40 (64)        ;  <--: Socket number used by the CardServices
  634. ;         0xFF = socket number invalid (Not a CardServices device)
  635. ;         other = socket number of the device
  636. ataSocketType             ds.b    1                ; offset: $42 (66)        ;  <--: Specifies the socket type (get config only)
  637. ;         00 = Unknown socket
  638. ;          01 = Internal ATA bus
  639. ;         02 = Media Bay
  640. ;         03 = PCMCIA
  641. ataDeviceType             ds.b    1                ; offset: $43 (67)        ;  <--: Specifies the device type (get config only)
  642. ;         00 = Unknown device
  643. ;         01 = standard ATA device (HD)
  644. ;         02 = ATAPI device
  645. ;         03 = PCMCIA ATA device
  646. atapcAccessMode             ds.b    1                ; offset: $44 (68)        ;  <->: Access mode: Memory vs. I/O (PCMCIA only)
  647. atapcVcc                 ds.b    1                ; offset: $45 (69)        ;  <->: Voltage in tenths of a volt (PCMCIA only)
  648. atapcVpp1                 ds.b    1                ; offset: $46 (70)        ;  <->: Voltage in tenths of a volt (PCMCIA only)
  649. atapcVpp2                 ds.b    1                ; offset: $47 (71)        ;  <->: Voltage in tenths of a volt (PCMCIA only)
  650. atapcStatus                 ds.b    1                ; offset: $48 (72)        ;  <->: Card Status register setting (PCMCIA only)
  651. atapcPin                 ds.b    1                ; offset: $49 (73)        ;  <->: Card Pin register setting (PCMCIA only)
  652. atapcCopy                 ds.b    1                ; offset: $4A (74)        ;  <->: Card Socket/Copy register setting (PCMCIA only)
  653. atapcConfigIndex         ds.b    1                ; offset: $4B (75)        ;  <->: Card Option register setting (PCMCIA only)
  654. ataSingleDMASpeed         ds.b    1                ; offset: $4C (76)        ;  <->: Single Word DMA Timing Class
  655. ataMultiDMASpeed         ds.b    1                ; offset: $4D (77)        ;  <->: Multiple Word DMA Timing Class
  656. ataPIOCycleTime             ds.w    1                ; offset: $4E (78)        ;  <->:Cycle time for PIO mode
  657. ataMultiCycleTime         ds.w    1                ; offset: $50 (80)        ;  <->:Cycle time for Multiword DMA mode
  658. Reserved1                 ds.w    7                ; offset: $52 (82)        ;  Reserved for future
  659. sizeof                     EQU *                    ; size:   $60 (96)
  660.                         ENDR
  661. ;  Get Card Location Icon/Text    <SM4>
  662.  
  663. kATALargeIconHFS                EQU        $0001                ; Large B&W icon with mask (HFS)
  664. kATALargeIconProDOS                EQU        $0081                ; Large B&W icon with mask (ProDOS)
  665. ;  Manager parameter block structure
  666. ataLocationData            RECORD 0
  667. ;  Start of cloned common header ataPBHdr
  668. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  669. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  670. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  671. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  672. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  673. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  674. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  675. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  676. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  677. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  678. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  679. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  680. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  681. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  682. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  683. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  684. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  685. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  686. ;  End of cloned common header ataPBHdr
  687. ataIconType                 ds.w    1                ; offset: $30 (48)        ;  -->: icon type specifier
  688. ;          1 = Large B&W icon with mask (256 bytes)
  689. ;         0x81 = Same as 1, but ProDOS icon
  690. ataIconReserved             ds.w    1                ; offset: $32 (50)        ;  Reserved to be longword aligned
  691. ataLocationIconPtr         ds.l    1                ; offset: $34 (52)        ;  -->: Icon Data buffer pointer
  692. ataLocationStringPtr     ds.l    1                ; offset: $38 (56)        ;  -->: Icon String buffer pointer
  693. Reserved1                 ds.w    18                ; offset: $3C (60)        ;  Reserved for future
  694. sizeof                     EQU *                    ; size:   $60 (96)
  695.                         ENDR
  696. ;  ataOSType available
  697.  
  698. kATAddTypeMacOS                    EQU        $0001                ; Blue Mac O/S ddType value
  699. ;  The parameter block definition for all other ATA Manager functions.
  700. ataGeneric                RECORD 0
  701. ;  Start of cloned common header ataPBHdr
  702. ataPBLink                 ds.l    1                ; offset: $0 (0)        ;  a pointer to the next entry in the queue    
  703. ataPBQType                 ds.w    1                ; offset: $4 (4)        ;  type byte for safety check
  704. ataPBVers                 ds.b    1                ; offset: $6 (6)        ;  -->: parameter block version number; Must be 0x01
  705. ataPBReserved             ds.b    1                ; offset: $7 (7)        ;  Reserved                                        
  706. ataPBReserved2             ds.l    1                ; offset: $8 (8)        ;  Reserved                                        
  707. ataPBCallbackPtr         ds.l    1                ; offset: $C (12)        ;  -->: Completion Routine Pointer    
  708. ataPBResult                 ds.w    1                ; offset: $10 (16)        ;  <--: Returned result                
  709. ataPBFunctionCode         ds.b    1                ; offset: $12 (18)        ;  -->: Manager Function Code 
  710. ataPBIOSpeed             ds.b    1                ; offset: $13 (19)        ;  -->: I/O Timing Class            
  711. ataPBFlags                 ds.w    1                ; offset: $14 (20)        ;  -->: Various control options    
  712. ataPBReserved3             ds.w    1                ; offset: $16 (22)        ;  Reserved                                        
  713. ataPBDeviceID             ds.l    1                ; offset: $18 (24)        ;  -->: Device identifier            
  714. ataPBTimeOut             ds.l    1                ; offset: $1C (28)        ;  -->: Transaction timeout value    in msec 
  715. ataPBClientPtr1             ds.l    1                ; offset: $20 (32)        ;  Client's storage Ptr 1     
  716. ataPBClientPtr2             ds.l    1                ; offset: $24 (36)        ;  Client's storage Ptr 2     
  717. ataPBState                 ds.w    1                ; offset: $28 (40)        ;  Reserved for Manager; Initialize to 0 
  718. ataPBSemaphores             ds.w    1                ; offset: $2A (42)        ;  Used internally by the manager
  719. ataPBReserved4             ds.l    1                ; offset: $2C (44)        ;  Reserved                                        
  720. ;  End of cloned common header ataPBHdr
  721. Reserved                 ds.w    24                ; offset: $30 (48)        ;  Reserved for future
  722. sizeof                     EQU *                    ; size:   $60 (96)
  723.                         ENDR
  724. ataPB                    RECORD 0
  725. ataIOParamBlock             ds        ataIOPB            ; offset: $0 (0)        ;  parameter block for I/O
  726.                          ORG 0
  727. ataBIParamBlock             ds        ataBusInquiry    ; offset: $0 (0)        ;  parameter block for bus inquiry
  728.                          ORG 0
  729. ataMIParamBlock             ds        ataMgrInquiry    ; offset: $0 (0)        ;  parameter block for Manager inquiry
  730.                          ORG 0
  731. ataAbortParamBlock         ds        ataAbort        ; offset: $0 (0)        ;  parameter block for abort
  732.                          ORG 0
  733. ataDRParamBlock             ds        ataDrvrRegister ; offset: $0 (0)        ;  parameter block for driver register
  734.                          ORG 0
  735. ataMEParamBlock             ds        ataModifyEventMask ; offset: $0 (0)        ;  parameter block for event mask modify
  736.                          ORG 0
  737. ataRAParamBlock             ds        ataRegAccess    ; offset: $0 (0)        ;  parameter block for register access
  738.                          ORG 0
  739. ataDIParamBlock             ds        ataIdentify        ; offset: $0 (0)        ;  parameter block for drive identify
  740.                          ORG 0
  741. ataDCParamBlock             ds        ataDevConfiguration ; offset: $0 (0)    ;  parameter block for device configuration
  742.                          ORG 0
  743. ataLDParamBlock             ds        ataLocationData ; offset: $0 (0)        ;  parameter block for location icon data
  744. ; ataManagerInit    ataInitParamBlock;        // parameter block for Manager initialization
  745. ; ataManagerShutDn    ataSDParamBlock;        // parameter block for Manager shutdown
  746. ; ataDrvrLoad        ataDLParamBlock;        // parameter block for Driver loading
  747.                          ORG 0
  748. ataGenericParamBlock     ds        ataGeneric        ; offset: $0 (0)        ;  parameter block for all other functions
  749.                          ORG 184
  750. sizeof                     EQU *                    ; size:   $B8 (184)
  751.                         ENDR
  752. ;  The ATA Event codes...
  753.  
  754. kATANullEvent                    EQU        $00                    ; Just kidding -- nothing happened
  755. kATAOnlineEvent                    EQU        $01                    ; An ATA device has come online
  756. kATAOfflineEvent                EQU        $02                    ; An ATA device has gone offline
  757. kATARemovedEvent                EQU        $03                    ; An ATA device has been removed from the bus
  758. kATAResetEvent                    EQU        $04                    ; Someone gave a hard reset to the drive
  759. kATAOfflineRequest                EQU        $05                    ; Someone requesting to offline the drive
  760. kATAEjectRequest                EQU        $06                    ; Someone requesting to eject the drive
  761. kATAUpdateEvent                    EQU        $07                    ; Potential configuration change reported by CardServices <SM4>
  762.                                                             ; The following describes bit definitions in the eventMask field of ataDrvrRegister
  763. bATANullEvent                    EQU        $01                    ; null event bit
  764. bATAOnlineEvent                    EQU        $02                    ; online event bit
  765. bATAOfflineEvent                EQU        $04                    ; offline event bit
  766. bATARemovedEvent                EQU        $08                    ; removed event bit
  767. bATAResetEvent                    EQU        $10                    ; reset event bit
  768. bATAOfflineRequest                EQU        $20                    ; offline request event bit
  769. bATAEjectRequest                EQU        $40                    ; eject request event bit
  770. bATAUpdateEvent                    EQU        $80                    ; configuration update event bit
  771. ;
  772. ; pascal SInt16 ataManager(ataPB *pb)
  773. ;
  774.     IF ¨ GENERATINGCFM THEN
  775.         _ataManager:    OPWORD    $AAF1
  776.     ELSE
  777.         IMPORT_CFM_FUNCTION ataManager
  778.     ENDIF
  779.  
  780. ;  Device Error codes: 0xDB42 - 0xDB5F    
  781.  
  782. ATABaseErrCode                    EQU        -9406                ; Base error code - 0xDB42    
  783. ioPending                        EQU        1                    ; Asynch I/O in progress status
  784. AT_NRdyErr                        EQU        -9405                ; 0xDB43: Drive not Ready 
  785. AT_IDNFErr                        EQU        -9404                ; 0xDB44: ID not found 
  786. AT_DMarkErr                        EQU        -9403                ; 0xDB45: Data mark not found 
  787. AT_BadBlkErr                    EQU        -9402                ; 0xDB46: Bad Block 
  788. AT_CorDataErr                    EQU        -9401                ; 0xDB47: Data was corrected 
  789. AT_UncDataErr                    EQU        -9400                ; 0xDB48: Data was not corrected 
  790. AT_SeekErr                        EQU        -9399                ; 0xDB49: Seek error 
  791. AT_WrFltErr                        EQU        -9398                ; 0xDB4A: Write fault 
  792. AT_RecalErr                        EQU        -9397                ; 0xDB4B: Recalibrate failed 
  793. AT_AbortErr                        EQU        -9396                ; 0xDB4C: Command aborted by drive 
  794. AT_MCErr                        EQU        -9394                ; 0xDB4E: Media Changed error
  795. ATAPICheckErr                    EQU        -9393                ; 0xDB4F: ATAPI Check condition <06/15/94>
  796.                                                             ; System error codes...Custom Driver Error Codes 0xDB60 - 0xDB6F
  797. DRVRCantAllocate                EQU        -9376                ; 0xDB60: Allocation error during initialization
  798. NoATAMgr                        EQU        -9375                ; 0xDB61: MgrInquiry failed => No ATA Manager
  799. ATAInitFail                        EQU        -9374                ; 0xDB62: Mgr Initialization failed
  800. ATABufFail                        EQU        -9373                ; 0xDB63: Device buffer test failure
  801. ATADevUnsupported                EQU        -9372                ; 0xDB64: Device type not supported
  802. ATAEjectDrvErr                    EQU        -9371                ; 0xDB65: Could not eject the drive
  803.                                                             ; Manager Error Codes 0xDB70 - 0xDB8F
  804. ATAMgrNotInitialized            EQU        -9360                ; 0xDB70: Mgr has not been initialized
  805. ATAPBInvalid                    EQU        -9359                ; 0xDB71: The bus base address couldn't be found
  806. ATAFuncNotSupported                EQU        -9358                ; 0xDB72: An unknown function code specified
  807. ATABusy                            EQU        -9357                ; 0xDB73: Selected device is busy
  808. ATATransTimeOut                    EQU        -9356                ; 0xDB74: Transaction timeout detected
  809. ATAReqInProg                    EQU        -9355                ; 0xDB75: Channel busy; channel is processing another cmd
  810. ATAUnknownState                    EQU        -9354                ; 0xDB76: Device status register reflects an unknown state
  811. ATAQLocked                        EQU        -9353                ; 0xDB77: I/O Queue is locked due to previous I/O error.
  812. ATAReqAborted                    EQU        -9352                ; 0xDB78: The I/O queue entry was aborted due to an abort req.
  813.                                                             ;            or due to Manager shutdown.
  814. ATAUnableToAbort                EQU        -9351                ; 0xDB79: The I/O queue entry could not be aborted.
  815. ATAAbortedDueToRst                EQU        -9350                ; 0xDB7A: Request aborted due to a device reset command.
  816. ATAPIPhaseErr                    EQU        -9349                ; 0xDB7B: Unexpected phase - ***IS THIS VALID ERROR??? <06/15/94>
  817. ATAPITxCntErr                    EQU        -9348                ; 0xDB7C: Overrun/Underrun condition detected
  818. ATANoClientErr                    EQU        -9347                ; 0xDB7D: No client present to handle the event
  819. ATAInternalErr                    EQU        -9346                ; 0xDB7E: MagnumOpus returned an error
  820. ATABusErr                        EQU        -9345                ; 0xDB7F: Bus error detected on I/O    
  821. AT_NoAddrErr                    EQU        -9344                ; 0xDB80: Invalid AT base adress 
  822. DriverLocked                    EQU        -9343                ; 0xDB81: Current driver must be removed before adding another
  823. CantHandleEvent                    EQU        -9342                ; 0xDB82: Particular event couldn't be handled (call others)
  824. ATAMgrMemoryErr                    EQU        -9341                ; 0xDB83: Manager memory allocation error    
  825. ATASDFailErr                    EQU        -9340                ; 0xDB84: Shutdown failure                
  826. ATAXferParamErr                    EQU        -9339                ; 0xDB85: I/O xfer parameters inconsistent 
  827. ATAXferModeErr                    EQU        -9338                ; 0xDB86: I/O xfer mode not supported 
  828. ATAMgrConsistencyErr            EQU        -9337                ; 0XDB87: Manager detected internal inconsistency. 
  829. ATADmaXferErr                    EQU        -9336                ; 0XDB88: fatal error in DMA side of transfer 
  830.                                                             ; Driver loader error Codes 0xDB90 - 0xDBA5
  831. ATAInvalidDrvNum                EQU        -9328                ; 0xDB90: Invalid drive number from event
  832. ATAMemoryErr                    EQU        -9327                ; 0xDB91: Memory allocation error
  833. ATANoDDMErr                        EQU        -9326                ; 0xDB92: No DDM found on media    
  834. ATANoDriverErr                    EQU        -9325                ; 0xDB93: No driver found on the media    
  835. ;  ------------------------    Version 1 definition -------------------------------    
  836.  
  837. v1ATABaseErrCode                EQU        $0700                ; This needs a home somewhere
  838. v1AT_NRdyErr                    EQU        $FFFFF901            ; 0xF901: -0x1DBE 
  839. v1AT_IDNFErr                    EQU        $FFFFF904            ; 0xF904: -0x1DC0 
  840. v1AT_DMarkErr                    EQU        $FFFFF905            ; 0xF905: -0x1DC0 
  841. v1AT_BadBlkErr                    EQU        $FFFFF906            ; 0xF906: -0x1DC0 
  842. v1AT_CorDataErr                    EQU        $FFFFF907            ; 0xF907: -0x1DC0 
  843. v1AT_UncDataErr                    EQU        $FFFFF908            ; 0xF908: -0x1DC0 
  844. v1AT_SeekErr                    EQU        $FFFFF909            ; 0xF909: -0x1DC0 
  845. v1AT_WrFltErr                    EQU        $FFFFF90A            ; 0xF90A: -0x1DC0 
  846. v1AT_RecalErr                    EQU        $FFFFF90B            ; 0xF90B: -0x1DC0 
  847. v1AT_AbortErr                    EQU        $FFFFF90C            ; 0xF90C: -0x1DC0 
  848. v1AT_NoAddrErr                    EQU        $FFFFF90D            ; 0xF90D: -0x1D8D 
  849. v1AT_MCErr                        EQU        $FFFFF90E            ; 0xF90E: -0x1DC0
  850.                                                             ; System error codes...Custom Driver Error Codes
  851. v1DRVRCantAllocate                EQU        -1793                ; 0xF8FF: -0x1D9F
  852. v1NoATAMgr                        EQU        -1794                ; 0xF8FE: -0x1D9D
  853. v1ATAInitFail                    EQU        -1795                ; 0xF8FD: -0x1D9B
  854. v1ATABufFail                    EQU        -1796                ; 0xF8FC: -0x1D99
  855. v1ATADevUnsupported                EQU        -1797                ; 0xF8FB: -0x1c97
  856.                                                             ; Manager Error Codes
  857. v1ATAMgrNotInitialized            EQU        -1802                ; 0xF8F6: -0x1D86
  858. v1ATAPBInvalid                    EQU        -1803                ; 0xF8F5: -0x1D84
  859. v1ATAFuncNotSupported            EQU        -1804                ; 0xF8F4: -0x1D82
  860. v1ATABusy                        EQU        -1805                ; 0xF8F3: -0x1D80
  861. v1ATATransTimeOut                EQU        -1806                ; 0xF8F2: -0x1D7E
  862. v1ATAReqInProg                    EQU        -1807                ; 0xF8F1: -0x1D7C
  863. v1ATAUnknownState                EQU        -1808                ; 0xF8F0: -0x1D7A
  864. v1ATAQLocked                    EQU        -1809                ; 0xF8EF: -0x1D78
  865. v1ATAReqAborted                    EQU        -1810                ; 0xF8EE: -0x1D76
  866. v1ATAUnableToAbort                EQU        -1811                ; 0xF8ED: -0x1D74
  867. v1ATAAbortedDueToRst            EQU        -1812                ; 0xF8EC: -0x1D72
  868.     ENDIF
  869.     ENDIF ; __ATA__ 
  870.  
  871.